In continuation to the previous article on Top Microservices Frameworks in Java, the evolution of Java frameworks with service-oriented architecture towards microservices architecture helps to understand the complete perspective.
Evolution of Java & Services Frameworks with Industry Trends
- Java EE launched EJB Specifications in 1999 to standardize enterprise services development to help developer’s focus on business logic encapsulation and underlying container (application server) handling non-functional aspects.
- Spring framework (launched in 2003) challenged the idea of full compliance of Java EE specification to avoid a heavyweight application server-centric approach.
- Service-oriented Architecture (SOA) as an architectural style started getting momentum in early 2000 with multiple product offerings promoting the rise of middleware & SOA platforms such as Enterprise Service Bus (ESB). While these required a steep learning curve, Java frameworks continued to rise because of either their simplicity & opensource nature or as a technology enabler for these platforms.
- Reactive programming with Java started with Play framework (by Lightbend) as one of the most widely known frameworks in 2007. Reactive programming introduced the idea of asynchronous programming with data streams. The communication mechanism for events, messages, calls, and even failure implements the observable pattern.
- Functional programming (e.g. map, reduce, filter) has been historically less popular than imperative programming but since early 2000 started getting momentum from non-functional languages. Java 8 support for functional programming with Lambda opened up avenues of applying functional programming with Java Frameworks.
- Event-driven Architecture started getting momentum in between 2000-2010 with Event-driven service-oriented architecture (SOA), which helped build service offerings easier. This enabled the rise of Axon framework, which enables building event-driven microservices.
- Functional Reactive Programming (FRP) mixed best of both worlds from reactive & functional and though introduced in 1997, started getting momentum in recent times. The ability to combine functions, operate, and transform the stream of events made concurrency handling better in Java. This enabled the rise of framework Eclipse Vert.x, which makes building reactive applications & microservices in Java easier.
- Microservices Architecture (a term coined in 2005 in distributed computing forum) started getting momentum from 2014 onwards and many frameworks have started being discussed to support this architectural style. Primarily, lightweight with light resource footprint, cloud-native ready, and nimbleness are key parameters frameworks started getting optimized for. Lagom, Helidon, Spring Boot, and Quarkus are the frameworks specifically designed to support Microservices Architecture (MSA) style.
Java Frameworks – Programming Style & Applicability
Framework | Developed By | Programming Style | Most suitable usage scenarios |
---|---|---|---|
Spring Framework | Pivotal (part of VMWare) | Imperative Programming. Reactive style introduced recently | Enterprise-grade, and industry-proven Java-based Microservices |
Micronaut | Object Computing | Imperative & Reactive Programming | Reactive programming, Event-Driven/Message-Driven Applications, Command Line Applications, HTTP Servers, and Microservices with Faster Startup Time |
Quarkus | Red Hat (part of IBM) | Imperative & Reactive Programming | Applications require faster boot time (native image), lightweight with low memory footprint. Reactive application development |
Helidon | Oracle | Imperative & Reactive Programming | Modern architecture with cloud-native, microservices support from initial architecture & design |
Vert.x | Eclipse Foundation | Reactive Programming | Event-driven architecture & Reactive application with non-blocking Concurrency (Actor-based) & Asynchronous I/O is required Support for multi-languages is required: Java, Kotlin, Groovy |
Dropwizard | Yammer (part of Microsoft) | Imperative Programming | For developing ops-friendly, high-performance, RESTful web services |
Open liberty | IBM | Imperative Programming | A lightweight open framework for building fast and efficient cloud-native Java microservices |
Armeria | LINE Corporation | Imperative & Reactive Programming | Go-to microservice framework leveraging your favorite technologies, including gRPC, Thrift, Kotlin, Retrofit, Reactive Streams, Spring Boot and Dropwizard |
Lagom | Lightbend | Reactive Programming | Opinioned framework to decompose monolith and build, test, and deploy entire systems of Reactive microservices |
Axon Framework | AxonIQ | Event-driven Programming | For event-driven microservices, based on CQRS, DDD |
Kumuluz | Sunesis | Imperative Programming | Lightweight framework with Java EE / Jakarta EE technologies and extend them with Node.js, Go and other languages |
Spark Java | Per Wendel | Imperative Programming | A micro-framework for creating web applications in Kotlin and Java 8 with minimal effort |
Payara Micro | Payara | Imperative Programming | Lightweight middleware platform for containerized Jakarta EE (Java EE) microservices |
Play Framework | Lightbend | Reactive Programming | A lightweight, stateless, web-friendly architecture with Java & Scala support. Built on Akka, provides predictable and minimal resource consumption (CPU, memory, threads) for highly-scalable applications |
References
Kumuluz provides both reactive and imperative models of programming.. for reactive they have kumulyz-re..